import router from "@/routers/index";
import { LOGIN_URL } from "@/config";
import { RouteRecordRaw } from "vue-router";
import { ElNotification } from "element-plus";
import {routerStore} from "@/stores/modules/router.ts";
import {authStore} from "@/stores/modules/auth.ts";

// 引入 views 文件夹下所有 vue 文件
const modules = import.meta.glob("@/views/**/*.vue");

/**
 * @description 初始化动态路由
 */
export const initDynamicRouter = async () => {
    const authState = authStore();
    const routerState = routerStore();
    try {
        // 1.判断当前用户有没有菜单权限
        if (!authState.menuList.length) {
            ElNotification({
                title: "无权限访问",
                message: "当前账号无任何菜单权限，请联系系统管理员！",
                type: "warning",
                duration: 3000
            });
            authState.resetAuth();
            routerState.resetRouters();
            await router.replace(LOGIN_URL);
            return Promise.reject(new Error("No permission"));
        }
        // 2.添加动态路由
        authState.flatMenuList.forEach(item => {
            item.children && delete item.children;
            if (item.path && item.path !== "") {
                item.component = modules["/src/views" + item.component_path + ".vue"];
                // item.component = () => import(`@/views${item.component_path}.vue`);
            }
            const routeItem = item as RouteRecordRaw;
            if (item.meta.full_screen) {
                router.addRoute(routeItem);
            } else {
                router.addRoute("layout", routeItem);
            }
        });
    } catch (error) {
        // 当按钮 || 菜单请求出错时，重定向到登陆页
        authState.resetAuth();
        routerState.resetRouters();
        await router.replace(LOGIN_URL);
        return Promise.reject(error);
    }
};
